template< typename ReturnParam, typename TypeParam , class FunctionClass >
class cTransformatorBinary
{
public:
	typedef ReturnParam	tTransReturnParam;
	typedef TypeParam	tTransTypeParam;

	cTransformatorBinary(TypeParam const& defVal)
	{
		m_iData	 = defVal;
	}
	
	TypeParam const& operator =(TypeParam const& defVal)
	{
		m_iData	= defVal;
		return m_iData;
	}

	virtual operator ReturnParam()
	{
		FunctionClass	apply;
		return apply(m_iData);
	}

private:
	TypeParam m_iData;
};

template< typename TypeParam , class FunctionClass >
class cTransformatorUnary : public cTransformatorBinary< TypeParam , TypeParam , FunctionClass >
{

public:
	cTransformatorUnary(TypeParam const& defVal):cTransformatorBinary<TypeParam,TypeParam,FunctionClass>(defVal){}
	
};

//Generalization of transition function -> Receives a TypeParam and retreivs a ReturnParam
template< class ReturnParam , class TypeParam >
class cTransFuncBinary
{
public:
	typedef ReturnParam	tTransReturnParam;
	typedef TypeParam	tTransTypeParam;

public:
	virtual ReturnParam operator ()(TypeParam Value) = 0;
};

//Specialization
template< class TypeParam >
class cTransFuncUnary : public cTransFuncBinary< TypeParam , TypeParam >
{
public:
	virtual TypeParam operator ()(TypeParam Value) = 0;
};

//Specialization
template< class TypeParam >
class cTransFuncMinus : public cTransFuncUnary< TypeParam >
{
public:
	virtual TypeParam operator ()(TypeParam Value)
	{
		return Value - 1;
	}
};

template< class TypeParam >
class cTransFuncPlus : public cTransFuncUnary< TypeParam >
{
public:
	virtual TypeParam operator ()(TypeParam Value)
	{
		return Value + 1;
	}
};